package com.qabaco.odondata.model.entities;

import java.io.Serializable;

import java.sql.Timestamp;

import java.text.SimpleDateFormat;

import javax.persistence.Column;
import javax.persistence.ColumnResult;
import javax.persistence.Entity;
import javax.persistence.EntityResult;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SqlResultSetMapping;
import javax.persistence.Table;
import javax.persistence.Transient;

@Entity
@NamedQueries({
  @NamedQuery(name = "Usuario.findAll", query = "select o from Usuario o")
})
@SqlResultSetMapping(name = "qUsuario",
                     entities={@EntityResult(entityClass = Usuario.class)},
                     columns ={@ColumnResult(name="MONTO_TOTAL") }) 
@Table(name = "usuarios")
public class Usuario implements Serializable {
    @Transient
    static SimpleDateFormat SDF = new SimpleDateFormat("dd/MM/yyyy"); 
    
    @Column
    private String apellido;
    @Column(name="CANT_INTENTOS")
    private Integer cantIntentos;
    @Column
    private String domicilio;
    @Column(name="FECHA_NACIMIENTO")
    private Timestamp fechaNacimiento;
    @Column(name="FECHA_ALTA", nullable = true)
    private Timestamp fechaAlta;
    @Column(name="FECHA_CURSO")
    private Timestamp fechaCurso;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false)
    private Integer id;
    @Column(name="ID_ROL")
    private Integer idRol;
    @Column
    private String mail;
    @Column
    private String nombre;
   /* @Column(nullable = false)
    private String password;*/
    @Column(name="TELEFONO_CEL")
    private String telefonoCel;
    @Column(name="TELEFONO_LAB")
    private String telefonoLab;
   /* @Column(nullable = true)
    private String usuario;*/
    @Column
    private Integer creditos;
    
    @Column(name="ESTADO", nullable = true)
    private Integer estado;
    
    
    @Transient
    private Double montoTotal;    
    @Transient
    private String fechaNacimientoFmt;
    @Transient
    private String fechaAltaFmt;
    @Transient
    private String fechaCursoFmt;

    public Usuario() {
    }

    public Usuario(String apellido, Integer cantIntentos, String domicilio,
                   Timestamp fechaNacimiento, Integer id, String mail,
                   String nombre, String telefonoCel,
                   String telefonoLab) { //, String usuario
        this.apellido = apellido;
        this.cantIntentos = cantIntentos;
        this.domicilio = domicilio;
        this.fechaNacimiento = fechaNacimiento;
        this.id = id;
        this.mail = mail;
        this.nombre = nombre;
        this.telefonoCel = telefonoCel;
        this.telefonoLab = telefonoLab;
      //  this.usuario = usuario;
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public Integer getCantIntentos() {
        return cantIntentos;
    }

    public void setCantIntentos(Integer cantIntentos) {
        this.cantIntentos = cantIntentos;
    }

    public String getDomicilio() {
        return domicilio;
    }

    public void setDomicilio(String domicilio) {
        this.domicilio = domicilio;
    }

    public Timestamp getFechaNacimiento() {
        return fechaNacimiento;
    }

    public void setFechaNacimiento(Timestamp fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getMail() {
        return mail;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

   
    public String getTelefonoCel() {
        return telefonoCel;
    }

    public void setTelefonoCel(String telefonoCel) {
        this.telefonoCel = telefonoCel;
    }

    public String getTelefonoLab() {
        return telefonoLab;
    }

    public void setTelefonoLab(String telefonoLab) {
        this.telefonoLab = telefonoLab;
    }  

    public void setCreditos(Integer creditos) {
        this.creditos = creditos;
    }

    public Integer getCreditos() {
        return creditos;
    }

    public void setFechaNacimientoFmt(String fechaNacimientoFmt) {        
        this.fechaNacimientoFmt = fechaNacimientoFmt;
    }

    public String getFechaNacimientoFmt() {
        if (fechaNacimiento != null){
            fechaNacimientoFmt = SDF.format(fechaNacimiento);  
        }
        return fechaNacimientoFmt;
    }

    public void setFechaAlta(Timestamp fechaAlta) {
        this.fechaAlta = fechaAlta;
    }

    public Timestamp getFechaAlta() {
        return fechaAlta;
    }

    public void setFechaAltaFmt(String fechaAltaFmt) {        
        this.fechaAltaFmt = fechaAltaFmt;
    }

    public String getFechaAltaFmt() {
        if (fechaAltaFmt == null && fechaAlta != null){
            fechaAltaFmt = SDF.format(fechaAlta);  
        }
        return fechaAltaFmt;
    }

    public void setEstado(Integer estado) {
        this.estado = estado;
    }

    public Integer getEstado() {
        return estado;
    }

    public void setMontoTotal(Double montoTotal) {
        this.montoTotal = montoTotal;
    }

    public Double getMontoTotal() {
        return montoTotal;
    }

    public void setIdRol(Integer idRol) {
        this.idRol = idRol;
    }

    public Integer getIdRol() {
        return idRol;
    }

    public void setFechaCursoFmt(String fechaCursoFmt) {
        this.fechaCursoFmt = fechaCursoFmt;
    }

    public String getFechaCursoFmt() {
        if ( fechaCurso != null){
            fechaCursoFmt = SDF.format(fechaCurso);  
        }
        return fechaCursoFmt;
    }

    public void setFechaCurso(Timestamp fechaCurso) {
        this.fechaCurso = fechaCurso;
    }

    public Timestamp getFechaCurso() {        
        return fechaCurso;
    }
}
